package org.huangrui.javase.basic;

/**
 * @Author hr
 * @Create 2025-11-06 20:02
 **/
public class T02BitOperator {
    /**
     * <<：左移，快速口诀：左移几位相当于乘以2的几次方
     * >>：右移，快速口诀：右移几位相当于除以2的几次方
     * >>>：无符号右移，即左边补位时不考虑原来符号位，直接补θ
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(9>>2);//相当于 9 / 2的2次 = 9 / 4 = 2.5 = 2（向下取整）
        System.out.println(9<<2);//相当于 9 * 2的2次 = 9 * 4 = 36
        System.out.println(9>>>2);//对于正数，结果与 >> 相同

        System.out.println(-9>>2);//相当于 -9 / 2的2次 = -9 / 4 = -2.5 = -3（向下取整）
        System.out.println(-9<<2);//相当于 -9 * 2的2次 = -9 * 4 = -36
        System.out.println(-9>>>2);//1073741821
        /*
        9的二进制：00000000 00000000 00000000 00001001
        9>>2：   左边补2个0，右边截掉2位
        9>>>2：  左边补2个0，右边截掉2位
                00000000 00000000 00000000 00000010（十进制2）

        -9的二进制：11111111 11111111 11111111 11110111
        -9>>2：   左边补两个1（因为原来最高位是1），右边截掉2位
                  11111111 11111111 11111111 11111101（十进制-3）
        -9>>>2：左边补2个0，右边截掉2位
                00111111 11111111 11111111 11111101（十进制1073741821）

        9的二进制：00000000 00000000 00000000 00001001
        9<<2：  左边截掉2位，右边补2个0
               00000000 00000000 00000000 00100100（十进制36）
        -9的二进制：11111111 11111111 11111111 11110111
        -9<<2：   左边截掉2位，右边补2个0
                  11111111 11111111 11111111 11011100（十进制-36）
         */
        System.out.println(9 << 65);//18
    }
}
